package class08;

public class Code06_ConvertToLetterString {

	public static int number(String str) {
		if (str == null || str.length() == 0) {
			return 0;
		}
		return process(str.toCharArray(), 0);
	}

	// i之前的位置，如何转化已经做过决定了
	// 下面函数完成的是 i...end 有多少转化的结果
	public static int process(char[] chs, int i) {
		if (i == chs.length) { // i来到了最后，返回1种有效决定，这个决定是之前做的决定。整体只有一种有效的
			return 1;
		}
		if (chs[i] == '0') { // 当前压中0字符，说明之前做的决定让我没法继续转换了，后续有0种转化。整体是0种有效的
			return 0;
		}
		if (chs[i] == '1') { // 当压中字符1，总有两种情况
			int res = process(chs, i + 1); //情况1：i自己作为单独的部分，后续有多少种方法
			if (i + 1 < chs.length) {// 不越界
				res += process(chs, i + 2); //情况2：(i与i+1)作为单独的部分，后续有多少种方法
			}
			return res;
		}
		if (chs[i] == '2') { // 压中字符2，也有两种情况
			int res = process(chs, i + 1); //情况1：i自己作为单独的部分，后续有多少种方法
			//情况2：(i与i+1)作为单独的部分且没有超过26，后续有多少种方法
			if (i + 1 < chs.length && (chs[i + 1] >= '0' && chs[i + 1] <= '6')) {
				res += process(chs, i + 2);
			}
			return res;
		}
		// 压中字符3~9
		return process(chs, i + 1);
	}

	public static void main(String[] args) {
		System.out.println(number("11111"));
	}

}
